#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "hash.h"

#define	STRSIZE 46

void	clear_str(char *, int);
int 	RandomInteger (int, int);

int main(int argc, char *argv[]) {

        FILE 	*fp;						// ponteiro para arquivo
        char 	aux[STRSIZE],aux2[5];				// vetor que le a palavra
	int	tamanho;					// tamanho de cada palavra
	char	*palavra = (char*)malloc(sizeof(char)*5);	// palavra a ser procurada
	int	i,j;						// controle loop
	hash	*tabela;
	node	*noh;
	int	flag;
	srand(time(NULL));

	//se der erro ao iniciar o arquivo
        if ( (fp = fopen(argv[1],"r")) == NULL ) 
        {
                printf("Erro ao abrir o arquivo.\n");
                exit(1);
        }  
  
        //cria uma tabela hash
	tabela=new_hash();

        //Le o arquivo e carrena na memória
        while(!feof(fp)) 
        {
		//limpa variavel aux
                clear_str(aux,STRSIZE);
		//le do arquivo
                fscanf(fp,"%s",aux);
		//aloca memoria
		tamanho=strlen(aux);
		if(tamanho>0 && tamanho < 6)//assim evido q ele aloca valores para \n e \0
		{
			noh= new_node(aux);
			alloc_node(noh,tabela);
		}
		else
		{
			j=0;
			clear_str(aux2,5);
			for(i=0;i<tamanho;i++)
			{
				aux2[j]=aux[i];
				j++;
				if(j==5)
				{
					j=0;;
					noh= new_node(aux2);
					alloc_node(noh,tabela);
					clear_str(aux2,5);
				}
			}
			if(j>0)
			{
				noh= new_node(aux2);
				alloc_node(noh,tabela);
			}	
		}                   
        }
	//print_hash(tabela);
	//Algoritimo
	while(tabela->n_element > 0)
	{
		tamanho=RandomInteger(1,5); // gera um numero aleatorio de 1 a 5 (inclusive)
		palavra = (char*)realloc(palavra,sizeof(char)*(tamanho)); // realoca o tamanho necessario para palavra gerada.
		clear_str(palavra,tamanho+1);
		//gera palavar aleatoria
		for(j=0;j<tamanho;j++)
				palavra[j]=(char)RandomInteger(97,122);//gera numero aleatorio de a-z (minusculos)

		//procura palavra, se encontrar apaga todas
		flag=1;
		while(flag==1)	
		{
			flag = rm_node(palavra,tabela);
			if(flag == 1)
				printf("%s\n",palavra);//imprime a palavra que encontrou
		}			
	}
		     
        fclose(fp);
        fflush(stdout);
        return 0;

}

void clear_str(char *c, int n) {

    int i = 0;

    for ( i = 0; i < n; i++ ) {
        c[i] = 0;
    }

}

int RandomInteger (int low, int high)
{
    int k;
    double d;
    d = (double) rand () / ((double) RAND_MAX + 1);
    k = d * (high - low + 1);
    return low + k;
}













